/**
 * 智学Web应用 - 数据库初始化脚本
 * 
 * 这个脚本负责：
 * 1. 创建数据库（如果不存在）
 * 2. 创建学科表
 * 3. 插入示例学科数据
 * 
 * 使用方法：node scripts/init-db.js
 */

const mysql = require('mysql2/promise');

// 数据库配置（连接到mysql系统数据库来创建新数据库）
const SYSTEM_DB_CONFIG = {
  host: 'localhost',
  user: 'root',
  password: '123456',
  database: 'mysql'  // 连接到系统数据库
};

// 智学应用数据库配置
const APP_DB_CONFIG = {
  host: 'localhost',
  user: 'root',
  password: '123456',
  database: 'zhixue_db'
};

/**
 * 创建数据库
 */
async function createDatabase(connection) {
  try {
    await connection.execute(`
      CREATE DATABASE IF NOT EXISTS zhixue_db
      CHARACTER SET utf8mb4
      COLLATE utf8mb4_unicode_ci
    `);
    console.log('✅ 数据库创建成功（或已存在）');
    return true;
  } catch (error) {
    console.error('❌ 创建数据库失败：', error.message);
    return false;
  }
}

/**
 * 创建学科表
 */
async function createSubjectsTable(connection) {
  try {
    await connection.execute(`
      CREATE TABLE IF NOT EXISTS subjects (
        id INT AUTO_INCREMENT PRIMARY KEY,
        name VARCHAR(50) NOT NULL COMMENT '学科名称',
        code VARCHAR(20) UNIQUE NOT NULL COMMENT '学科代码',
        description TEXT COMMENT '学科描述',
        color VARCHAR(20) DEFAULT '#409EFF' COMMENT '主题颜色',
        icon VARCHAR(50) DEFAULT 'Book' COMMENT '图标名称',
        sort_order INT DEFAULT 0 COMMENT '排序顺序',
        status TINYINT DEFAULT 1 COMMENT '状态：1启用，0禁用',
        created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
        updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
        INDEX idx_sort_order (sort_order),
        INDEX idx_status (status)
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
    `);
    console.log('✅ 学科表创建成功');
    return true;
  } catch (error) {
    console.error('❌ 创建学科表失败：', error.message);
    return false;
  }
}

/**
 * 插入示例学科数据
 */
async function insertSampleData(connection) {
  const subjects = [
    {
      name: '语文',
      code: 'CHINESE',
      description: '语言文字学科，培养阅读理解和表达能力',
      color: '#E6A23C',
      icon: 'Reading',
      sort_order: 1
    },
    {
      name: '数学',
      code: 'MATH',
      description: '数理逻辑学科，培养抽象思维和计算能力',
      color: '#409EFF',
      icon: 'Edit',
      sort_order: 2
    },
    {
      name: '英语',
      code: 'ENGLISH',
      description: '外国语言学科，培养国际交流能力',
      color: '#67C23A',
      icon: 'ChatLineSquare',
      sort_order: 3
    },
    {
      name: '物理',
      code: 'PHYSICS',
      description: '自然学科，探索物质世界的基本规律',
      color: '#F56C6C',
      icon: 'Lightning',
      sort_order: 4
    },
    {
      name: '化学',
      code: 'CHEMISTRY',
      description: '实验学科，研究物质的组成、结构、性质',
      color: '#909399',
      icon: 'Magic',
      sort_order: 5
    }
  ];

  try {
    // 先检查是否已有数据
    const [existingRows] = await connection.execute('SELECT COUNT(*) as count FROM subjects');
    if (existingRows[0].count > 0) {
      console.log('ℹ️  学科数据已存在，跳过插入');
      return true;
    }

    // 插入数据
    for (const subject of subjects) {
      await connection.execute(`
        INSERT INTO subjects (name, code, description, color, icon, sort_order)
        VALUES (?, ?, ?, ?, ?, ?)
      `, [subject.name, subject.code, subject.description, subject.color, subject.icon, subject.sort_order]);
    }
    
    console.log('✅ 示例学科数据插入成功');
    return true;
  } catch (error) {
    console.error('❌ 插入示例数据失败：', error.message);
    return false;
  }
}

/**
 * 主函数
 */
async function main() {
  let systemConnection;
  let appConnection;

  try {
    console.log('🚀 开始初始化数据库...\n');

    // 第一步：连接到系统数据库，创建应用数据库
    console.log('📋 第一步：创建数据库');
    systemConnection = await mysql.createConnection(SYSTEM_DB_CONFIG);
    await createDatabase(systemConnection);
    await systemConnection.end();

    // 第二步：连接到应用数据库，创建表和数据
    console.log('\n📋 第二步：创建数据表');
    appConnection = await mysql.createConnection(APP_DB_CONFIG);
    
    await createSubjectsTable(appConnection);
    await insertSampleData(appConnection);

    console.log('\n🎉 数据库初始化完成！');
    console.log('📊 数据库：zhixue_db');
    console.log('📚 表：subjects（学科表）');
    console.log('📈 数据：已插入5个示例学科');

  } catch (error) {
    console.error('❌ 数据库初始化失败：', error.message);
    process.exit(1);
  } finally {
    // 确保连接都被关闭
    if (systemConnection) await systemConnection.end();
    if (appConnection) await appConnection.end();
  }
}

// 运行脚本
if (require.main === module) {
  main();
}

module.exports = { createDatabase, createSubjectsTable, insertSampleData };